package qin.service;

import java.util.List;

import qin.annotation.Length;
import qin.annotation.NoEmpty;
import qin.annotation.Valid;
import qin.entity.Book;
import qin.entity.R;

/**
 * 外部提供图书服务
 * @author 小行星
 *
 */
@Valid
public interface BookService {
	
	/**
	 * 添加一本书
	 * @param book
	 * @return
	 */
	public R<?> addBook(@Valid Book book);
	
	/**
	 * 编辑一本书
	 * @param number
	 * @param book
	 * @return
	 */
	public R<?> updateBook(@NoEmpty("书号") @Length(min = 1, max = 64)String number,
			@Valid Book book);
	
	/**
	 * 删除一本书
	 * @param number
	 * @param book
	 * @return
	 */
	public R<?> deleteBook(@NoEmpty("书号") @Length(min = 1, max = 64) String number);
	
	/**
	 * 查询所有书（按照书号从小到大排序）
	 * @return
	 */
	public R<List<Book>> getBooks();
	
	/**
	 * 根据书号查书
	 * @param number
	 * @return
	 */
	public R<Book> getBookByNumber(@NoEmpty("书号") @Length(min = 1, max = 64)String number);
	
	/**
	 * 根据作者查询书（按照书号从小到大排序）
	 * @param author
	 * @return
	 */
	public R<List<Book>> getBooksByAuthor(@Length(min = 1, max = 65) String author);
	
	/**
	 * 根据出版社查询书（按照书号从小到大排序）
	 * @param press
	 * @return
	 */
	public R<List<Book>> getBooksByPress(@Length(min = 1, max = 99) String press);
}
